package cn.edu.scut.hsrc.bean;

import cn.edu.scut.hsrc.bean.WordSet.TS;


/**
 * 一个聚类文档的按照词的顺序描述成一个向量，元素为SeqWord
 * @file SeqDoc.java
 * @author feiyu
 *
 */

public class SeqDoc {
	
	private SeqSegment [] segments;	//文档段的集合，前面一部分是标题分段，后面一部分是摘要分段
	private final int separator;	//标题和摘要段的分割线，（0,separator)是标题分段，[separator,segments.length)是摘要分段
									//这个字段先保留，看以后是否进行调整
	
	
	/**
	 * 
	 * 构造函数
	 * @param tSNum		标题的分段数目
	 * @param sSNum		摘要的分段数目
	 */
	public SeqDoc(int tSNum,int sSNum) {
		// TODO Auto-generated constructor stub
		int size = tSNum+sSNum;
		this.segments = new SeqSegment[size];
		for(int i=0;i<size;i++)
			this.segments[i] = new SeqSegment();
		this.separator = tSNum;
	}
	
	/**
	 * 为该文档特定分段添加词
	 * @param seqWord  		词
	 * @param where			来源（标题or摘要）
	 * @param segmentNum	段号
	 * @return 	返回在文档中实际添加入的段号
	 */
	public int addWord(SeqWord seqWord,TS where,int segmentNum)
	{
		if(where == TS.TITLE)
		{
			this.segments[segmentNum].addWord(seqWord);
			return segmentNum;
		}
		else{
			this.segments[this.separator+segmentNum].addWord(seqWord);
			return this.separator+segmentNum;
		}
	}
	
	/**
	 * 返回文档中指定来源，指定分段，指定偏移的词
	 * @param where			来源（标题or摘要）
	 * @param segmentNum	段号（如果来源是标题，段号就只针对标题的，如果是摘要，就是针对摘要的）
	 * @param offset		段内偏移
	 * @return
	 */
	public SeqWord getWord(TS where,int segmentNum,int offset) {
		if(where == TS.TITLE)
			return this.segments[segmentNum].getWord(offset);
		else return this.segments[this.separator+segmentNum].getWord(offset);
	}
	
	/**
	 * 返回指定段，指定偏移的词
	 * @param segmentNum	段号（有可能标题，也有可能是摘要）
	 * @param offset		段内偏移
	 * @return
	 */
	public SeqWord getWord(int segmentNum,int offset) {
		return this.segments[segmentNum].getWord(offset);
	}
	
	/**
	 * 根据下标号，返回对应的段
	 * @param index
	 * @return
	 */
	public SeqSegment getSegment(int index) {
		return this.segments[index];
	}
	
	/**
	 * 返回文档分段的数目
	 * @return
	 */
	public int getSegmentNum() {
		return this.segments.length;
	}
	
	/**
	 * 
	 * @return
	 */
	public int getSeparator() {
		return this.separator;
	}
	
	@Override
	public String toString()
	{
		String text = "";
		text += "separator="+this.separator+"\n";
		int size = this.segments.length;
		for(int i=0;i<size;i++)
		{
			if(i == this.separator)
				text += "-----------------------上面标题，下面摘要-----------------------------\n";
			text += this.segments[i]+"\n";
			
		}
		text += "\n";
		return text;
	}
}

